package com.specter.serv.service;

import com.specter.sure.core.Authorized;

/**
 * Note:用户认证授权提供机
 * 
 * @author Liang.Wang
 * @version Apr 20, 2011 12:07:45 AM
 */
public interface UserOauthService {

	/**
	 * 通过用户登录名来加载用户信息
	 * 
	 * @param loginId
	 * @return
	 */
	public Authorized getByClientId(String clientId);

	/**
	 * 验证客户端标识Id
	 * 
	 * @param clientId 标识串
	 * @return 是否检验成功
	 */
	public boolean validateClientId(String clientId);

	/**
	 * 验证客户端签名Sg
	 * 
	 * @param signature 签名串
	 * @param timestamp 时间戳
	 * @return 是否检验成功
	 */
	public boolean validateClientSg(String signature, String timestamp);

	/**
	 * 验证客户端密钥SK
	 * 
	 * @param clientSecret 密钥串
	 * @return 是否检验成功
	 */
	public boolean validateClientSk(String clientSecret);

	/**
	 * 添加 AuthCode
	 * 
	 * @param authCode
	 * @param username
	 */
	public void addAuthCode(String authCode, String username);

	/**
	 * 通过AuthCode获取UserName
	 * 
	 * @param authCode
	 * @return
	 */
	public String getByAuthCode(String authCode);

	/**
	 * 验证AuthCode是否有效
	 * 
	 * @param authCode
	 * @return
	 */
	public boolean validateAuthCode(String authCode);

	/**
	 * 添加 AccessToken
	 * 
	 * @param username
	 */
	public String addAccessToken(String username);

	/**
	 * 通过AccessToken获取UserName
	 * 
	 * @param accessToken
	 * @return
	 */
	public String getByAccessToken(String accessToken);

	/**
	 * 验证AccessToken是否有效
	 * 
	 * @param accessToken
	 * @return
	 */
	public boolean validateAccessToken(String accessToken);

	/**
	 * AuthCode / AccessToken 过期时间，时间单位为 秒
	 * 
	 * @return
	 */
	public long getExpireIn();

}
